// inimanager.h

#ifndef INIMANAGER_H
#define INIMANAGER_H

#include <QObject>
#include <QVariant>
#include <QMap>
#include <QMutex>
#include <QSettings>

class iniManager : public QObject
{
    Q_OBJECT
public:
    explicit iniManager(const QString &filePath, QObject *parent = nullptr);
    ~iniManager();

public:
    // 读取指定组和键的值
    QVariant readValue(const QString &group, const QString &key, const QVariant &defaultValue = QVariant()) const;

    // 写入指定组和键的值
    bool writeValue(const QString &group, const QString &key, const QVariant &value);

    // 添加一个组及其键值对
    bool addGroup(const QString &group, const QVariantMap &keyValues);

    // 移除一个组
    bool removeGroup(const QString &group);

    // 移除指定组中的一个键
    bool removeValue(const QString &group, const QString &key);

    // 获取所有组名
    QStringList allGroups() const;

    // 获取指定组中的所有键名
    QStringList allKeys(const QString &group) const;

    // 分割字符串
    static QStringList splitString(const QString &input);

    // 生成组ID字符串
    static QString getGroupIdQString(const uint16_t id, const uint16_t l, const uint16_t w, const uint16_t h, const QString type);

//    static QString getGroupIdQString(const QString &id, const QString &l, const QString &w, const QString &h, const QString &type);

    // 检查指定键值对是否存在
    bool isExists(const QString &key, const QVariant &value) const;

    // 获取组类型
    static QString getGroupType(const QString &type);
    static QString getGroupType(const uint16_t &w, const uint16_t &l);

    // 从Map批量写入键值对
    bool writeValues(const QString &group, const QVariantMap &keyValues);

    // 同步设置到文件
    bool sync();

    QString getGroup(const QString &key, const QVariant &value) const;
public slots:

private:
    QString m_filePath;
    QMutex m_mutex;
    QSettings *m_settings;

    // 初始化设置
    void initSettings();
};

#endif // INIMANAGER_H
